/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package model.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import model.ConnectionFactory;
import model.beans.TipoUsuario;
import model.beans.Usuario;
import model.negocio.TipoUsuarioNegocio;

/**
 *
 * @author Carol
 */
public class UsuarioDAO {
    private Connection con;
    private PreparedStatement stmtInserir;
    private PreparedStatement stmtAlterar;
    private PreparedStatement stmtDeletar;
    private PreparedStatement stmtListar;
    private PreparedStatement stmtBuscar;
    private PreparedStatement stmtValidaLogin;
    
    public UsuarioDAO() throws Exception{
        con = ConnectionFactory.getConnection();
    }
    
    public UsuarioDAO(Connection con) throws Exception{
        this.con = con;        
    }
    
     public void inserir(Usuario usuario) throws SQLException{
       stmtInserir = con.prepareStatement("INSERT INTO usuario(nome, email, senha, tpUsuario) VALUES (?, ?, ?, ?);");
       stmtInserir.setString(1, usuario.getNome());
       stmtInserir.setString(2,usuario.getEmail());
       stmtInserir.setString(3, usuario.getSenha());
       stmtInserir.setInt(4, usuario.getTpUsuario().getId());
       stmtInserir.executeUpdate();      
       stmtInserir.close();
    }
     
    public void alterar(Usuario usuario) throws SQLException{
       stmtAlterar = con.prepareStatement("UPDATE usuario SET nome = ? , email = ? , tpUsuario = ? WHERE nrMatricula = ? ;");
       stmtAlterar.setString(1, usuario.getNome());
       stmtAlterar.setString(2,usuario.getEmail());
       stmtAlterar.setInt(3,usuario.getTpUsuario().getId());
       stmtAlterar.setInt(4,usuario.getNrMatricula());
       stmtAlterar.executeUpdate();    
       stmtAlterar.close();
    }
    
    public void deletar(int nrMatricula) throws SQLException{
        stmtDeletar = con.prepareStatement("DELETE FROM usuario WHERE nrMatricula = ? ;");
        stmtDeletar.setInt(1,nrMatricula);
        stmtDeletar.executeUpdate();
        stmtDeletar.close();
    }
    
    public List<Usuario> listar() throws Exception{
        stmtListar = con.prepareStatement("SELECT nrMatricula, nome, email, tpUsuario FROM usuario");
        ResultSet rs = stmtListar.executeQuery();
        List<Usuario> lista = new ArrayList();
        while(rs.next()){
            Usuario usuario = new Usuario();
            usuario.setNrMatricula(rs.getInt("nrMatricula"));
            usuario.setNome(rs.getString("nome"));
            usuario.setEmail(rs.getString("email"));
            TipoUsuario tpUsuario = new TipoUsuario(rs.getInt("tpUsuario"));
            usuario.setTpUsuario(tpUsuario);
            lista.add(usuario);
        }
        stmtListar.close();
        return lista;
    }
    
    public Usuario buscar(int id) throws Exception{
        stmtBuscar = con.prepareStatement("SELECT * FROM usuario WHERE nrMatricula = ? ;");
        Usuario usuario = new Usuario();
        stmtBuscar.setInt(1, id);
        ResultSet rs = stmtBuscar.executeQuery();
         if(rs.next()){
            usuario.setNrMatricula(rs.getInt("nrMatricula"));
            usuario.setNome(rs.getString("nome"));
            usuario.setEmail(rs.getString("email"));
            usuario.setSenha(rs.getString("senha"));
            TipoUsuario tpUsuario = new TipoUsuario(rs.getInt("tpUsuario"));
            usuario.setTpUsuario(tpUsuario);
         }
        stmtBuscar.close();
        return usuario;
    }
    
    public Usuario validaLogin(String login, String senha) throws SQLException{
        stmtValidaLogin = con.prepareStatement("SELECT * FROM usuario WHERE email LIKE ? AND senha LIKE ?");
        Usuario usuario = new Usuario();
        TipoUsuarioNegocio tipoNegocio = new TipoUsuarioNegocio();
        
        stmtValidaLogin.setString(1, login);
        stmtValidaLogin.setString(2, senha);
        
        ResultSet rs = stmtValidaLogin.executeQuery();
        if(rs.next()){
            usuario.setNrMatricula(rs.getInt("nrMatricula"));
            usuario.setNome(rs.getString("nome"));
            usuario.setEmail(rs.getString("email"));
            usuario.setSenha(rs.getString("senha"));
            usuario.setTpUsuario(tipoNegocio.buscarPorId(rs.getInt("tpUsuario")));
        }else{
            usuario.setNrMatricula(0);
        }
        return usuario;
    }
}


